#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;

/**
 * 伪随机数生成函数
 * 通过输入的二维坐标生成一个[0,1)范围内的伪随机数
 * @param co 输入的二维坐标，作为随机数生成的种子
 * @return 返回基于输入坐标的伪随机数，范围在[0,1)之间
 */
float rand(vec2 co) {
    // 固定种子
    return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
}

void main(void) {
    // 将屏幕坐标转换为[-1, 1]范围内的UV坐标
    vec2 uv = (gl_FragCoord.xy / u_resolution.xy) * 2.0 - 1.0;

    // 使用ceil函数将当前像素分配到与之最近的整数坐标上
    vec2 pixelPos = ceil((uv + vec2(1.0)) * u_resolution.xy / 2.0);

    // 将整数坐标作为随机数种子，生成噪声
    float noise = rand(pixelPos);

    // 添加噪声
    uv.y += noise;

    // 根据Y坐标值在蓝色和红色之间进行插值混合
    vec3 color = mix(vec3(0.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), uv.y);
    gl_FragColor = vec4(color, 1.0);

}